有哪些常用的单向散列函数
常用的单向散列函数有以下这些:
MD4:MD4是由Rivest于1990年设计的单向散列函数,能够产生128bit的散列值。不过随着Dobbertin提出寻找MD4散列的碰撞方法,现在已经不安全了。
MD5:MD5是由Rivest于1991年设计的单向散列函数,能够产生128比特的散列值。MD5的强抗碰撞性已经被攻破,也就是说,现在已经能够产生具备相同散列值的两条不同的消息,因此它已经不安全了。
SHA-256、SHA-384、SHA-512:该三种函数都是由NIST设计的单向散列函数,它们的散列值长度分别为256bit、384bit、512bit。这些单向散列函数合起来统称SHA-2,它们的消息长度也存在上限(SHA-256的上限接近于2的64方比特,SHA-384和SHA-512的上限接近于2的128比特)。这些单向散列函数于2002年和SHA-1一起作为FIPS PUB 180-2发布的。
PIPEMD-160:PIPEMD-160是于1996年设计出的一种能够产生160bit的散列值的单向散列函数。PIPEMD-160是欧盟PIPE项目所设计的RIPEMD单向散列函数的修订版。这一系列的函数还包括PIPEMD-128、PIPEMD-256、PIPEMD-320等其他一些版本。在CRYPTREC密码清单》中,PIPEMD-160已经被列入“可谨慎运用的密码清单”,即除了用于保持兼容性的目的以外,其他情况都不推荐使用。PIPEMD的强抗碰撞性已经于2004年被攻破,但PIPEMD-160还尚未被攻破。顺便一提,比特币使用的就是PIPEMD-160。
SHA-3:在2005年SHA-1的强抗碰撞性被攻破的背景下,NIST开始着手制定用于取代SHA-1的下一代单向散列函数SHA-3。SHA-3和AES一样采用公开竞争的方式进行标准化。SHA-3的选拔于5年后的2012年尘埃落定,一个名叫Keccak的算法胜出,最终成为了SHA-3。